package cl.mt.util.socialnetwork;

import java.io.InputStream;
import java.util.Properties;

import cl.mt.util.HiloEnvioMensaje;
import cl.mt.util.MessageSender;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.http.AccessToken;

/**
 *
 * @author adrianxo
 */
public class TwitterSenderService implements MessageSender {

    private final Properties properties = new Properties();
    private String mensaje;

    private void cargarProperties() {
        if (!properties.isEmpty()) {
            return;
        }
        try {
            InputStream in = getClass().getResourceAsStream("/twitter.properties");
            properties.load(in);
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public TwitterSenderService() {
        cargarProperties();
    }

    public void sendMessage() throws Exception {
        // The factory instance is re-useable and thread safe.
        Twitter twitter = getTwitter();
        //twitter.setOAuthConsumer("[consumer key]", "[consumer secret]");
        AccessToken accessToken = loadAccessToken();
        twitter.setOAuthAccessToken(accessToken);
        Status status = twitter.updateStatus(getMensaje());
    }

    public void sendMessage(String mensaje) throws Exception {
        this.mensaje = mensaje;
        sendMessage();
    }

    private Twitter getTwitter() {
        Twitter twitter = new Twitter();
        twitter.setOAuthConsumer(properties.getProperty("idapp"),
                properties.getProperty("passwapp"));
        return twitter;
    }

    private AccessToken loadAccessToken() {
        String token = properties.getProperty("token"); // load
        String tokenSecret = properties.getProperty("tokenSecret"); // load
        return new AccessToken(token, tokenSecret);
    }

    public static void enviarMensajeAsinc(String texto) {
    	TwitterSenderService service = new TwitterSenderService();
        service.setMensaje(texto);
        HiloEnvioMensaje hiloEnvioTwitter = new HiloEnvioMensaje(service);
        hiloEnvioTwitter.start();
    }

    /**
     * @return the mensaje
     */
    public String getMensaje() {
        return mensaje;
    }

    /**
     * @param mensaje the mensaje to set
     */
    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }
}
